package com.yfp.org.mapper;


import cn.hutool.core.date.DateTime;
import com.yfp.common.datascope.annotation.DataScope;
import com.yfp.org.domain.dto.ComboStatisticsDTO;
import com.yfp.org.domain.dto.ProductsTopSalesDTO;
import com.yfp.org.domain.dto.SalesRankingDTO;
import com.yfp.org.domain.dto.SalesTrendsDTO;
import com.yfp.org.domain.entity.ComboInfo;
import com.yfp.org.domain.entity.OrderList;
import com.yfp.org.domain.entity.Tag;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 订单表(OrderList)表数据库访问层
 *
 *
 * @since 2023-12-28 16:07:34
 */
public interface OrderListMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param orderSn 主键
     * @return 实例对象
     */
    OrderList queryById(OrderList orderList);

    /**
     * 查询指定行数据
     *
     * @param orderList 查询条件
     * @return 对象列表
     */
    List<OrderList> queryAllByLimit(OrderList orderList);

    List<OrderList> queryLimit(OrderList orderList);

    List<OrderList> queryLime(@Param("list") List<String> companyId);

    /**
     * 统计总行数
     *
     * @param orderList 查询条件
     * @return 总行数
     */
    long count(OrderList orderList);

    /**
     * 新增数据
     *
     * @param orderList 实例对象
     * @return 影响行数
     */
    int insert(OrderList orderList);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<OrderList> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<OrderList> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<OrderList> 实例对象列表
     * @return 影响行数
     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
     */
    int insertOrUpdateBatch(@Param("entities") List<OrderList> entities);

    int updateBatch(@Param("list") List<OrderList> entities);

    /**
     * 修改数据
     *
     * @param orderList 实例对象
     * @return 影响行数
     */
    int update(OrderList orderList);


    List<Tag> tagStatistics(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

    @DataScope(deptAlias = "co")
    List<ComboInfo> comboStatistics(ComboStatisticsDTO comboStatisticsDTO);

    String queryCoboroad(@Param("comboId") String comboId);

    void updateException(OrderList order);

    void updateRefund(OrderList order);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    OrderList getById(String id);

    /**
     * 通过主键更新数据
     *
     * @param orderLists 主键
     * @return 影响行数
     */
    void updateById(OrderList orderLists);

    /**
     * 分页查询
     *
     * @param orderList
     * @return
     */
    List<OrderList> selectAllLimit(OrderList orderList);

    /**
     * 设备订单
     * @param orderList
     * @return
     */
    List<OrderList> getDeviceOrder(OrderList orderList);

    /**
     * 点位销售排行
     *
     * @return
     */
    List<SalesRankingDTO> salesRanking();

    /**
     * 实时销售情况额
     *
     * @return
     */
    BigDecimal salesRealtime();

    /**
     * 销售走势分析
     *
     * @return
     */
    List<SalesTrendsDTO> salesTrends(@Param("lastStartOfWeek") DateTime lastStartOfWeek, @Param("endOfWeek") DateTime endOfWeek);

    /**
     * 产品销量排行Top10
     *
     * @return
     */
    List<ProductsTopSalesDTO> productsTopSales();
}
